package com.chat.entity;


import java.io.Serializable;

/**
 * 数据包实体类
 * @author LinYang
 * @date 2022-11-08
 */
public class DataPackage extends Entity implements Serializable {

    private static final long serialVersionUID = 1L;
    //数据对象
    private Object date;
    //数据包行为
    private ServerAction action;
    //数据包状态
    //200 成功 501失败 201请求
    private int code;

    /*事件id*/
    private int eventId;

    //token验证
    private String token;


    public int getEventId() {
        return eventId;
    }

    public void setEventId(int eventId) {
        this.eventId = eventId;
    }

    public DataPackage() {
    }

    /**
     * 构造方法
     * @param date 数据对象
     * @param action 数据包行为
     * @param code 数据包code
     */
    public DataPackage(Object date, ServerAction action, int code) {
        this.date = date;
        this.action = action;
        this.code = code;
    }

    public DataPackage(Object date, ServerAction action, int code, String token) {
        this.date = date;
        this.action = action;
        this.code = code;
        this.token = token;
    }

    /**
     *  获取数据包对象
     * @return 数据包对象
     */
    public Object getDate() {
        return date;
    }

    /**
     * 设置数据包对象
     * @param date 数据包对象
     */
    public void setDate(Object date) {
        this.date = date;
    }

    /**
     * 获得数据包行为枚举
     * @return 数据包行为枚举
     */
    public ServerAction getAction() {
        return action;
    }

    /**
     * 设置数据包行为
     * @param action 数据包行为枚举
     */
    public void setAction(ServerAction action) {
        this.action = action;
    }

    /**
     * 获得数据包状态
     * @return 200 正常，404不存在，501服务器错误
     */
    public int getCode() {
        return code;
    }

    /**
     * 设置数据包状态
     * @param code 200 正常，404不存在，501服务器错误
     */
    public void setCode(int code) {
        this.code = code;
    }

    public String getToken() {
        return token;
    }

    public void setToken(String token) {
        this.token = token;
    }

//    /**
//     * 输出数据包信息
//     * @return 字符串信息
//     */
//    @Override
//    public String toString() {
//        return "DataPackage{\n"
//                +"\ndate:"+getDate().toString()
//                +"\naction:"+action.toString()
//                +"\ncode:"+code
//                +"\n}";
//    }

    /**
     * 生成成功状态数据包
     * @param data 数据包数据
     * @param action 数据包行为
     * @return DataPacage对象
     */
    public static DataPackage successResponse(Object data,ServerAction action){
        return new DataPackage(data,action,200);
    }

    /**
     *  生成成功状态数据包
     * @param data 数据包数据
     * @return DataPacage对象
     */
    public static DataPackage successResponse(Object data){
        return new DataPackage(data,ServerAction.YES,200);
    }

    /**
     * 生成失败状态数据包
     * @param data 数据包数据
     * @param action 数据包行为
     * @return DataPacage对象
     */
    public static DataPackage failResponse(Object data,ServerAction action){
        return new DataPackage(data,action,404);
    }

    /**
     * 生成失败状态数据包
     * @param data 数据包数据
     * @return DataPacage对象
     */
    public static DataPackage failResponse(Object data){
        return new DataPackage(data,ServerAction.NO,404);
    }

    public static DataPackage request(ServerAction action){
        return new DataPackage(null,action,201);
    }
    public static DataPackage request(Object params,ServerAction action){
        return new DataPackage(params,action,201);
    }

}
